#!/usr/bin/env python
# -*- coding: UTF-8 -*-
'''
@Project ：图灵学习 
@File    ：2.同步任务与异步任务.py
@IDE     ：PyCharm 
@Author  ：ChenLiGao
@Date    ：2024-11-06 14:53
'''
import time
import asyncio # 异步标准库

# 同步任务
# def func():
#     time.sleep(1)
#     print("我是同步任务.....")
#
#
# start_time = time.time()
# for _ in range(5):
#     func()
# end_time = time.time()
# print(f"耗时：{end_time - start_time}")

# 异步任务
async def func2(index): # 协程函数
    # 在协程函数中休眠方法需要使用asyncio.sleep方法
    print(f"我是异步任务开始.....{str(index)}")
    await asyncio.sleep(index)
    print(f"我是异步任务结束.....{str(index)}")

# # 异步函数调用后生成一个与生成器类似的协程对象：coroutine object
# coro_obj = func2()
# print(coro_obj)

# 运行协程对象
start_time = time.time()

# 事件循环对象
loop = asyncio.get_event_loop()
# task_list = [loop.create_task(func2(i)) for i in range(5)] # 高版本执行方式
task_list = [func2(i) for i in range(5)]
# 使用事件循环对象去运行多个异步任务
loop.run_until_complete(asyncio.wait(task_list))

end_time = time.time()
print(f"耗时：{end_time - start_time}")

"""
    同步任务：执行任务时，如果当前任务没有完成，则下一个任务就需要等待，直到当前任务执行完成才能执行
    异步任务：使用同一个线程，执行多个任务，如果第一个任务有耗时操作，则当前线程不会等待这个任务，而是执行其他任务
"""

